home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / eddilib / bitmap.c next >
C/C++ Source or Header  |  1994-11-03  |  4KB  |  168 lines

  1. /*********************************************************/
  2. /*                                                                             */
  3. /*                              Demo-Quelltext fr                        */
  4. /*                            die Bearbeitung von                        */
  5. /*                             Off-Screen-Bitmaps                        */
  6. /*                                                                            */
  7. /*********************************************************/
  8. /* sb */
  9. /* 28.04.93 */
  10.  
  11. /* Includes */
  12. #include <portab.h>
  13. #include <vdi.h>
  14. #include <aes.h>
  15. #include <tos.h>
  16. #include    <eddilib.h>
  17.  
  18. /* Funktionsprototypen */
  19. WORD    open_vwk( WORD *work_out );
  20. WORD    open_bitmap( WORD x, WORD y, MFDB *bitmap, WORD *work_out );
  21. void    clip_screen( void );        
  22. void    clip_bitmap( void );        
  23. void    draw( void );
  24.  
  25. /* Globale Variablen */
  26. WORD  s_handle,
  27.         b_handle,
  28.         screen_out[128],
  29.         bitmap_out[128];
  30. MFDB    bitmap,
  31.         screen;
  32.  
  33. /* virtuelle Workstation ”ffnen */
  34. WORD    open_vwk( WORD *work_out )
  35. {
  36.     WORD    count,
  37.             dummy,
  38.             handle,
  39.             work_in[11];
  40.  
  41.     handle = graf_handle( &dummy, &dummy, &dummy, &dummy );
  42.  
  43.     for( count = 1; count < 10; count++ )
  44.         work_in[count] = 1;
  45.  
  46.     work_in[0] = Getrez()+2; 
  47.     work_in[10] = 2;                                /* Rasterkoordinaten */
  48.  
  49.     v_opnvwk( work_in, &handle, work_out );
  50.  
  51.     return( handle );
  52. }
  53.  
  54. /* Clipping fr den Bildschirm setzen */
  55. void    clip_screen( void )        
  56. {
  57.     WORD    xyarr[4];
  58.     
  59.     xyarr[0] = 0;
  60.     xyarr[1] = 0;
  61.     xyarr[2] = screen_out[0];
  62.     xyarr[3] = screen_out[1];
  63.     vs_clip( s_handle, 1, xyarr );    /* Clipping fr den Bildschirm */
  64. }
  65.  
  66. /* Clipping fr die Bitmap setzen */
  67. void    clip_bitmap( void )        
  68. {
  69.     WORD    xyarr[4];
  70.     
  71.     xyarr[0] = 0;
  72.     xyarr[1] = 0;
  73.     xyarr[2] = bitmap_out[0];
  74.     xyarr[3] = bitmap_out[1];
  75.     vs_clip( b_handle, 1, xyarr );    /* Clipping fr den Bildschirm */
  76. }
  77.  
  78. /* Auf der Off-Screen-Bitmap zeichnen */
  79. void    draw( void )
  80. {
  81.     BYTE    bezarr[512];
  82.     WORD    xyarr[512],
  83.             extent[4],
  84.             actual,
  85.             totpts,
  86.             totmoves;
  87.  
  88.     vsf_color( b_handle, 3 );
  89.     vsf_interior( b_handle, 2 ); 
  90.     vsf_style( b_handle, 1 );
  91.     vsf_perimeter( b_handle, 1 );
  92.     vswr_mode( b_handle, 1 );
  93.     
  94.     xyarr[0] = 0;
  95.     xyarr[1] = 0;
  96.     xyarr[2] = 250;
  97.     xyarr[3] = 250;
  98.     v_bar( b_handle, xyarr );
  99.     
  100.     vsf_color( b_handle, 1 );
  101.     vsf_style( b_handle, 3 );
  102.     v_bez_on( b_handle );
  103.     v_bez_qual( b_handle, 100, &actual );
  104.     
  105.     xyarr[0] = 100;
  106.     xyarr[1] = 100;
  107.     xyarr[2] = 400;
  108.     xyarr[3] = 100;
  109.     xyarr[4] = 400;
  110.     xyarr[5] = 400;
  111.     xyarr[6] = 100;
  112.     xyarr[7] = 400;
  113.     
  114.     xyarr[8] = 200;
  115.     xyarr[9] = 200;
  116.     xyarr[10] = 300;
  117.     xyarr[11] = 200;
  118.     xyarr[12] = 300;
  119.     xyarr[13] = 300;
  120.     xyarr[14] = 200;
  121.     xyarr[15] = 300;
  122.  
  123.     bezarr[0] = 1;
  124.     bezarr[1] = 0;
  125.     bezarr[2] = 0;
  126.     bezarr[3] = 0;
  127.     bezarr[4] = 3;
  128.     bezarr[5] = 0;
  129.     bezarr[6] = 0;
  130.     bezarr[7] = 0;
  131.      
  132.     v_bez_off( b_handle );
  133.     
  134.     v_gtext( b_handle, 50, 50, "Text!" );
  135. }
  136.  
  137. main()
  138. {
  139.     WORD    xyarr[8];
  140.     
  141.     if (( s_handle = open_vwk( screen_out )) != 0 )
  142.     {
  143.         bitmap.fd_addr = 0;                        /* VDI alloziert Bitmap */
  144.         bitmap.fd_nplanes = 0;                    /* Planeanzahl wie Bildschirm */
  145.         if (( b_handle = open_bitmap( 799, 607, &bitmap, bitmap_out)) != 0 )
  146.         {
  147.             clip_screen();                            /* Clipping fr den Bildschirm setzen */
  148.             clip_bitmap();                            /* Clipping fr die Bitmap setzen */
  149.             draw();                                    /* auf der Off-Screen-Bitmap zeichnen */
  150.  
  151.             /* und jetzt die Bitmap auf den Bildschirm kopieren... */
  152.             screen.fd_addr = 0;
  153.             xyarr[0] = 0;
  154.             xyarr[1] = 0;
  155.             xyarr[2] = 799;
  156.             xyarr[3] = 607;
  157.             xyarr[4] = 100;
  158.             xyarr[5] = 100;
  159.             xyarr[6] = 899;
  160.             xyarr[7] = 707;
  161.             vro_cpyfm( s_handle, S_ONLY, xyarr, &bitmap, &screen );
  162.     
  163.             v_clsbm( b_handle );                    /* Bitmap schliežen */
  164.         }
  165.         v_clsvwk( s_handle );                    /* virtuelle Workstation schliežen */
  166.     } 
  167.     return(0);    
  168. }